Hallo,
mit folgendem Basic-Programm kann man in Turbobasic XL einen Farbverlauf sehen... Da sieht mal erst, wie lahm dieses Basic ist.
DO
PAUSE %0
FOR A=0 TO 4:NEXT A
POKE 53274,14
FOR A=4 TO 14 STEP 2:POKE 53274,A
NEXT A
POKE 53274,0
LOOP
In Assembler sieht ein Farbverlauf etwa so aus, wobei hier der Code etwas unvollständig ist.
loop
lda vcount ; Zeile vom aktuellen Rasterstrahl
sta wsync ; warte auf nächste Zeile
sta colbk ; Hintergrundfarbe setzen
; sta colpf2 ; falls auch die Vordergrundfarbe gesetzt werden soll.
jmp loop
Hier wird jede 2. Zeile in einer anderen Farbe dargestellt und der Prozessor eigentlich zu >90% stillgelegt.
In (m)einer Hochsprache würde der Code so aussehen:
PROGRAM farblauf
LOMEM $4000,runad
byte vcount=$D40B
byte wsync=$D40A
byte colbk=$D01A
begin
while 1!=0 do
begin
wsync:=0
colbk:=vcount
end
end
Da die Sprache kein "do-loop" kennt, behelfe ich mir mit while 1!=0, man könnte auch while 1<>0 nehmen.
Einmal durch den Compiler getrieben, sieht das Ergebnis so aus, die ersten 19 Zeilen habe ich mal entfernt. Schön an meinem Compiler, er versucht den zugrunde liegenden Source als Kommentare mit einzubinden.
?WHILE1
;
; while 1!=0 do
;
LDY #<0
CPY #<1 ; (14)
BNE ?THEN1 ; (26)
?FA1
JMP ?WEND1
?THEN1
;
; wsync:=0
;
LDY #<0
STY WSYNC
;
; colbk:=vcount
;
LDY VCOUNT
STY COLBK
JMP ?WHILE1
?WEND1
Die Kommentare: Zahl in Klammer verrät mir, das hier der Peephole-Optimizer etwas gedreht hat. Es ist nicht das Optimum, aber verdammt nah dran und brauchbar schnell. Dafür ist der Source-Code kürzer und besser lesbar.
LG Lars